API Manager API
Deploy an API from scratch
The following guide shows two different use cases:
- Deploying a new API instance to a Flex Gateway target
- Deploying a new API instance to a Mule 4 Hybrid target
Deploying a new API instance to a Flex Gateway target
Prerequisites and permissions for Connected Apps
When deploying Flex Gateway APIs using a Connected App (client credentials flow), configure the app with the following scopes:
API Manager scopes:
Manage APIs Configuration
Manage Policies
View Policies
Deploy API Proxies
Runtime Manager & Exchange scopes:
Runtime Manager: Read Servers
Exchange: Exchange Viewer
General: View Organization
When using TLS context:
Outbound TLS (upstream TLS context)
Ensure the connected app has been granted the following Secrets Manager scopes:
- Read secrets metadata
- Manage secret groups
- Grant access to secrets
- Write secrets
⚠️ Without these scopes, AMC Deployer will fail to retrieve the secret group grants for the TLS context. Note that deployment via the API Manager UI works correctly in this scenario, as the UI uses platform-level credentials rather than the connected app's permissions.
For more information, see:
Flex Gateway API creation
The following request creates an API instance that will be deployed on a Flex Gateway proxy:
curl -X POST \
https://anypoint.mulesoft.com/apimanager/api/v1/organizations/:organizationId/environments/:environmentId/apis \
-H 'authorization: Bearer <token>' \
-H 'content-type: application/json' \
-d '{
"spec": {
"groupId": "<organizationId>",
"assetId": "<assetId>",
"version": "<assetVersion>"
},
"endpoint": {
"deploymentType": "HY",
"uri": "<upstreamUri>",
"proxyUri": "http://0.0.0.0:8081/",
"isCloudHub": null
},
"technology": "flexGateway",
"instanceLabel": "example-label"
}'Change the port of the proxyUri parameter to the best one for your use.
This is a response example for a Flex Gateway instance creation. Keep the instance "id" in order to use it in the deployment request:
{
"environmentId": "<environmentId>",
"instanceLabel": "example-label",
"providerId": null,
"technology": "flexGateway",
"assetVersion": "<assetVersion>",
"productVersion": "v1",
"order": 1,
"stage": "release",
"audit": {
"created": {
"date": "2022-09-30T17:13:13.079Z"
},
"updated": {}
},
"masterOrganizationId": "<organizationId>",
"organizationId": "<organizationId>",
"id": 1234567,
"groupId": "<organizationId>",
"assetId": "<assetId>",
"tags": [],
"endpoint": {
"deploymentType": "HY",
"isCloudHub": null,
"muleVersion4OrAbove": null,
"referencesUserDomain": null,
"responseTimeout": *null*,
"uri": "<upstreamUri>",
"proxyUri": "http://0.0.0.0:8081/",
"type": "http",
"validation": "NOT_APPLICABLE",
"audit": {
"created": {
"date": "2022-09-30T17:13:13.079Z"
},
"updated": {}
},
"masterOrganizationId": "<organizationId>",
"organizationId": "<organizationId>",
"id": 9876543,
"apiId": 1234567
},
"autodiscoveryInstanceName": "v1:1234567"
}From this response, the instance "id" is 1234567.
Flex Gateway API deployment
Now we can deploy the created API instance by making a request to Proxies XAPI:
curl --location --request POST 'https://anypoint.mulesoft.com/proxies/xapi/v1/organizations/:organizationId/environments/:environmentId/apis/1234567/deployments' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer <token>' \
--data-raw '{
"type": "HY",
"gatewayVersion": "1.3.0",
"targetId": "22855abb-f6e9-4046-ab08-ead5eb531c0e",
"targetName": "<flex-target-name>",
"environmentId": "<environmentId>"
}'Where 22855abb-f6e9-4046-ab08-ead5eb531c0e and <flex-target-name> are the id and name of the Flex Gateway target displayed in Runtime Manager.
A successful request returns a response like the following:
{
"type": "HY",
"gatewayVersion": "1.3.0",
"targetId": "22855abb-f6e9-4046-ab08-ead5eb531c0e",
"environmentId": "<environmentId>",
"environmentApiId": 1234567,
"targetMetadata": {
"target": {
"id": "22855abb-f6e9-4046-ab08-ead5eb531c0e",
"provider": "RR"
},
"spec": {
"target": {
"environment": {
"target": {
"id": "22855abb-f6e9-4046-ab08-ead5eb531c0e",
"provider": "RR"
}
},
"annotations": {
"gateway-manager.mulesoft.com/kind": "<gateway-kind>"
}
}
}
},
"audit": {
"created": {
"date": "2022-09-30T17:11:54.989Z"
},
"updated": {}
},
"masterOrganizationId": "<organizationId>",
"organizationId": "<organizationId>",
"id": 11223344,
"expectedStatus": "deployed",
"apiId": 1234567
}Where <gateway-kind> is either managed or selfManaged depending on the type of the corresponding gateway.
Upon receiving this request, the API instance has been deployed to your Flex Gateway target.
Deploying a new API instance to a Mule 4 Hybrid target
Mule 4 Hybrid API creation
This example shows how to create an API instance for a Mule 4 Hybrid target:
curl --location --request POST 'https://anypoint.mulesoft.com/apimanager/api/v1/organizations/:organizationId/environments/environmentId/apis' \
--header 'Authorization: bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"spec": {
"groupId": "<organizationId>",
"assetId": "<assetId>",
"version": "<assetVersion>"
},
"deploymentType": "HY",
"technology": "mule4",
"endpoint": {
"uri": "<upstreamUri>",
"proxyUri": "http://0.0.0.0:8081/",
"isCloudHub": false
}
}'This is a response example for a Mule 4 Hybrid instance creation. Keep the instance "id" in order to use it in the deployment request::
{
"environmentId": "<environmentId>",
"providerId": null,
"technology": "mule4",
"assetVersion": "<assetVersion>",
"productVersion": "v1",
"order": 1,
"stage": "release",
"audit": {
"created": {
"date": "2023-02-14T12:20:05.976Z"
},
"updated": {}
},
"masterOrganizationId": "<organizationId>",
"organizationId": "<organizationId>",
"id": 1234567,
"groupId": "<orgamizationId>",
"assetId": "<assetId>",
"tags": [],
"endpoint": {
"deploymentType": "HY",
"isCloudHub": false,
"muleVersion4OrAbove": true,
"uri": "<upstreamUri>",
"proxyUri": "http://0.0.0.0:8081/",
"type": "http",
"validation": "NOT_APPLICABLE",
"audit": {
"created": {
"date": "2023-02-14T12:20:05.976Z"
},
"updated": {}
},
"masterOrganizationId": "<organizationId>",
"organizationId": "<organizationId>",
"id": 987654,
"proxyTemplate": {
"assetId": "api-gateway-sample-http-proxy",
"assetVersion": "2.0.5",
"groupId": "org.mule.examples"
},
"console": null,
"apiId": 1234567
},
"autodiscoveryInstanceName": "v1:1234567"
}From this response, the instance "id" is 1234567.
Mule 4 Hybrid API deployment
Now we can deploy the created API instance by making a request to Proxies XAPI:
curl --location --request POST 'https://anypoint.mulesoft.com/proxies/xapi/v1/organizations/:organizationId/environments/:environmentId/apis/1234567/deployments' \
--header 'Content-Type: application/json' \
--header 'Authorization: bearer <token>' \
--data-raw '{
"gatewayVersion": "4.4.0",
"targetId": 99887766,
"targetName": "<hybridServerName>",
"targetType": "server",
"type": "HY",
"environmentId": "<environmentId>",
"environmentName": "<environmentName>"
}'Where 99887766, and <hybridServerName> are the id and name of the Mule Hybrid target displayed in Runtime Manager.
This request returns a response like the following:
{
"gatewayVersion": "4.4.0",
"targetId": 99887766,
"targetName": "<hybridServerName>",
"targetType": "server",
"type": "HY",
"environmentId": "<environmentId>",
"environmentName": "<environmentName>",
"environmentApiId": 1234567,
"audit": {
"created": {
"date": "2023-02-14T12:33:43.206Z"
},
"updated": {}
},
"masterOrganizationId": "<organizationId>",
"organizationId": "<organizationId>",
"id": 111111,
"expectedStatus": "deployed",
"apiId": 1234567
}Upon receiving this request, the API instance has been deployed to your Mule 4 Hybrid target.